package org.anderground.editor.gui.view.drawers.editor;

import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.util.List;

import org.anderground.core.model.Station;
import org.anderground.core.model.Transition;
import org.anderground.core.model.Tunnel;
import org.anderground.core.util.Coord;

public interface EditorsDrawer {

	/**
	 * 
	 * @param stationSelection
	 * @param tunnelSelection
	 * @param g
	 * @param showStationLabels
	 */
	public void draw(List<Station> stationSelection,
			List<Tunnel> tunnelSelection, Graphics g, boolean showStationLabels);

	/**
	 * shift metro map
	 * 
	 * @param dx
	 *            shifting by 0X axis
	 * @param dy
	 *            shifting by 0Y axis
	 */
	public void shift(int dx, int dy);

	public void setDrawerCenter(int x, int y);

	/**
	 * get rectangle that must be repainted on single station repaint
	 * 
	 * @param station
	 * @return
	 */
	public Rectangle getRedrawRect(Station station);

	/**
	 * get rectangle that must be repainted on single transition repaint
	 * 
	 * @param station
	 * @return
	 */
	public Rectangle getRedrawRect(Transition trans);

	/**
	 * get station by relative point
	 * 
	 * @param point
	 * @return
	 */
	public List<Station> getStations(Point point);

	public List<Transition> getTransitions(Point point);

	public Station getLabelsStation(Point point);

	public Coord getAbsolutePoint(Point local);

	/**
	 * scale getter and setter
	 * 
	 * @return
	 */
	public float getScale();

	/**
	 * set map scale
	 * 
	 * @param scale
	 */
	public void setScale(float scale);
}
